package com.sky.mapper;

import com.sky.entity.SetmealDish;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 每一个单独的表,都会创建一个对应的mapper文件
 * 这里用的是接口,因为SetmealDish没有对应的实体类,所以这个mapper创建的是接口;感觉是接口还是java类,代码没啥区别,都一样写sql语句
 * @author 岳海
 * @version 1.0
 * 312 / 356
 */
@Mapper
public interface SetmealDishMapper {

    /**
     * 根据菜品id来查询对应的套餐id
     * 也是动态sql,传入的dishIds有多少个作为where的条件是不确定的
     * @param dishIds
     * @return
     */
    //select setmeal_id from setmeal_dish where dish_id in (1,2,3,4)
    //多对多的关系,一个套餐可能会查出多个套餐,所以下面用List集合,只需要返回对应Long型的套餐id就可以
    List<Long> getSetmealIdsByDishIds(List<Long> dishIds);
    //传入的也是多个id,即list类型的dishIds;
    // 刚好在DishServiceImpl.java类中,传入的就是List<Long>这个类型的ids,在那个类中调用当前这个方法,List集合都不用遍历了

    /**
     *  批量插入套餐和菜品的关联关系
     *  人家还真是批量的保存,对应的SetmealDishMapper.xml里面真有foreach的标签,循环遍历
     *  批量插入真的是实至名归
     * @param setmealDishes
     */
    void insertBatch(List<SetmealDish> setmealDishes);

    /**
     * 根据套餐id删除套餐和菜品的关联关系
     * 根据套餐id,去套餐菜品的关系表中,,,再把对应的关系删除,,,注意这时候不是套餐表了
     * @param setmealId
     */
    @Delete("DELETE FROM setmeal_dish   WHERE  setmeal_id  =  #{setmealId}")
    void deleteBySetmealId(Long setmealId);

    /**
     * 这里的是根据套餐id,查询套餐菜品关联的数据
     * @param setmealId
     * @return
     */
    @Select("SELECT  * FROM setmeal_dish WHERE setmeal_id = #{setmealId}")
    List<SetmealDish> getBySetmealId(Long setmealId);

}
